<?php
class cmsplg__simplesitemenu extends CMSPlugin2
{

	function GetTitle()
	{
		return 'Меню сайта';
	}

	function GetIcon()
	{
		return "icon.gif";
	}

	function GetProperties()
	{
		return array(new CARXCheckbox("Не раскрывать дерево", "onlyActualBranch"), new CARXCheckbox("По одной", "onlyOneBranch"), new CARXEdit("ID родителя", "parent_id"),  new CARXEdit("Extra path", "extra"));
	}

	function getSiteStructure($parentId=0, $extraUrl='', $actualPageId=0)
	{
		$table= new CARXTable("adm__cms_page", "parent_page_id='$parentId' AND include=1");
		$table->SetOrder("ord ASC");
		$rows=$table->FetchRows();
			$i=0;
			foreach ($rows as $row)
			{
				if(!empty($extraUrl))	$row['filename']=$extraUrl."/".$row['filename'];
				$rows[$i]['filename']=$row['filename'];
				if (!$this->onlyActualBranch)
				{
					$sub=$this->getSiteStructure($row['page_id'], $row['filename']);
					if($sub)
					{
						// если передан параметр открытия ветки только заданного раздела
						if(!empty($actualPageId))
						{
							// Ищем этот раздел в ветке потомков
							if($this->searchInArray($actualPageId, "page_id", $sub) || $this->searchInArray($actualPageId, "parent_page_id", $sub))
							{
								// раздел нашелся, добавляем ветку в дерево
								if($this->onlyOneBranch)
								{
									// двухуровневый цикл. !нужно сделать рекурсию! иначе не универсально получается
									foreach ($sub as $key=>$val)
									{
										if(is_array($val['sub']))
										{
											foreach ($val['sub'] as $skey=>$sval)
											{
												if($sval['parent_page_id']!=$actualPageId)
												{
													$sub[$key]['sub']=0;
												}
											}
										}
									}
									
								}
								$rows[$i]['sub']=$sub;
							}
						}
						else 
						{
							$rows[$i]['sub']=$sub;
						}
					}
				}
				$i++;
			}
		return $rows;
	}

	private function searchInArray($str, $searchKey, $arr)
	{
		foreach ($arr as $key=>$val)
		{
			if($key==$searchKey && $val==$str)
			{ return true; }
			else 
			{
				if(is_array($arr[$key]))
				{
					if($this->searchInArray($str, $searchKey, $arr[$key]))
					return true;
				}
			}
		}
		return false;
	}
	
	function GetOutput()
	{
		$this->mTemplate=($this->mTemplate) ? $this->mTemplate : "menu/up.tpl";
		$extra=($this->extra)? $this->extra : '';
		// цвета для разделов в меню
		$parent=($this->parent_id) ? $this->parent_id : 0;
		if ($this->onlyActualBranch) $actualPageId=$GLOBALS['core']->mCurrentPageId; else $actualPageId=0;
		$structure=$this->getSiteStructure($this->parent_id, $extra, $actualPageId);
		$t=new CARXTable("adm__cms_page", "page_id='".$parent."'");
		$parent_page=$t->FetchRow();
		$this->SetData("parent", $parent_page);
		$this->SetData("sitemenu",$structure);
		$this->SetData("currentPageId",$GLOBALS['core']->mCurrentPageId);
		return $this->RunFileTemplate();
	}
}


?>